<?php
/* 
分类模型
* @Author: {daifei}
* @Date:   2014-03-19 15:04:38
* @Last Modified by:   {daifei}
* @Last Modified time: 2014-03-22 13:37:20
*/
	class CategoryModel extends Model{
		public $table='category';
		//验证规则
		public $validate=array(
			array('cname','notnull' ,'分类名不能为空',2,3),
			array('cname' , 'maxlen:20' ,'分类名不能多于20个字符',2,3),
			//分类标题可有可没有  第三个参数就控制这个
			array('ctitle', 'minlen:1' ,'分类标题不能少于1个字符' ,3,3),
			array('ctitle' ,'maxlen:60' , '分类标题不能多于60个字符',3,3),

			array('ckeywords' ,'minlen:1', '分类关键字不能少于1个字符' ,2,3),
			array('ckeywords' ,'maxlen:255' ,'分类关键字多于255个字',2,3),
			array('cdes' ,'minlen:1' ,'分类描述不能少于1个字符' , 2,3),
			array('cdes' ,'maxlen:255' ,'分类描述不能多于255个字',2,3),
			array('htmldir' ,'regexp:/^[0-9A-Za-z_]{1,20}$/' ,'静态目录名不正确',2,3)
			);
		//验证是必须运行crete()
		/**
		 * [get_all 获得所有的数据 包括分页]
		 * @return [type] [description]
		 */
		public function get_all(){
			//分页    总条数  每页条数  显示几页  风格
			$total=$this->count();

			$page=new page($total , 10,3,4);

			//查找全部  
			$limit=$page->limit();

			$date=$this->limit($limit)->findAll();
			//将分页的信息全部存到 数组中去
			$date['page']=$page->show();
			return $date;
		}/**
		 * 获得所有的数据 不包括分类
		 */
		public function get_data($field=NULL){
			return $this->field($field)->findAll();
		}
		/**
		 * [add_adte 添加数据]
		 * @return [type] [description]
		 */
		public function add_data(){
			return $this->add();
		}
		/**
		 * [del_data 删除数据]
		 * @return [type] [description]
		 */
		public function del_data($cid){
			 $this->delete($cid);
		}
		/**
		 * [update_data 修改数据]
		 * @return [type] [description]
		 */
		public function update_data($cid){
			//如果update和save不传参数  就会以post的传过来的值进行更新
			 $this->where(array('cid'=>$cid))->save();

		}
		/**
		 * [get_one_data 获得一条数据  表示你要编辑的那一条数据]
		 * @return [type] [description]
		  *///通过主键id获得单条数据
		public function get_one_data($cid,$field=NULL){
			//将查询到的那一条数据传过去
			return $this->field($field)->where(array('cid'=>$cid))->find();

		}
		/**
		 * [have_data 判断是否有子类]
		 * @return [type] [description]
		 */
		public function have_data($cid){
			//判断是否有子类
			$cid=$this->where(array('pid' =>$cid))->getField('cid');
			if($cid){
				$this->error='请先删除子类';
				return false;
			}
			//如果下面有文章  请先删除文章
			// $aid=K('article')->where(array('category_cid' =>$cid)->getField('aid'));
			// if($aid){
			// 	$this->error='请先删除分类下面的文章';
			// 	return false;
			// }
			return true;
			
		}
		/**
		 * [update_stat 修改is_show is_listhtml is_archtml他们状态]
		 * @return [type] [description]
		 */
		public function ajax_stat(){
			// P(3);die;
			//点击对勾和错的图片  发送ajax  
			//1通过查询查询数据来显示不同的变量  如判断字段中的is_listhtml 如果等于1表示显示
			//2同传送一个cid  告知 要改变那条数据
			//3通过传送type告知点击的是哪一个图片
			//4通过传送switch告知是现在的图片是哪一张   需要改变成什么数据
			$cid=Q('cid' ,0 ,'intval');
			$type=Q('type');
			$switch=Q('switch' ,0,'intval');
			switch ($type) {
				case 'list':
					if($switch){
						$this->where(array('cid'=>$cid))->save(array('is_listhtml'=>1));
					}else{
						$this->where(array('cid' =>$cid))->save(array('is_listhtml'=>0));
					}
					break;
				case 'arc':
					if($switch){
						$this->where(array('cid'=>$cid))->save(array('is_archtml'=>1));
					}else{
						$this->where(array('cid' =>$cid))->save(array('is_archtml'=>0));
					}
					break;
				case 'show':
					if($switch){
						$this->where(array('cid'=>$cid))->save(array('is_show'=>1));
					}else{
						$this->where(array('cid' =>$cid))->save(array('is_show'=>0));
					}
					break;
				
			}
			return true;

		}
		/**
		 * [get_one_data  通过递归获得所有的子类id]
		 * @return [type] [description]
		 */
		public function get_son_id($cid){
			$arr=$this->field('cid,pid')->all();

			$nullArr=array();
			
			foreach ($arr as $v) {
				if($cid==$v['pid']){
					// p($v['pid']);
					// p($cid);die;
					$nullArr[]=$v['cid'];
					// p($nullArr);die;
					$nullArr=array_merge($nullArr,$this->get_son_id($v['cid']));
				}
			}
			//如果在这个地方打印会没有值 因为递归 到最后才会把值给返出来也就
			// p($nullArr);die;
			return $nullArr;

		}

		/**
	 * [get_chose_cate 获得当前分类可以选择作为自己的父级
	 * 不能选择自己和子类做为修改]
	 * @param  [type] $cid [description]
	 * @return [type]      [description]
	 */
	public function get_chose_cate($cid){
		//返回出 组合好的子集的所有值
		$cidArr=$this->get_son_id($cid);
		//查询所有 将自己和子级除外
		$cidArr[]=$cid;
		$cidArr= implode(',', $cidArr);
		//组合好查询出自己和子级外的所有 元素
		$sql="SELECT `cid`,`cname` FROM " .C('DB_PREFIX') ."category WHERE cid NOT IN ($cidArr)";
		
		$data=$this->query($sql);
		return $data;

	}
		
	}	
?>
